#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
struct ss{
	char c;
	int t,v,x,y;
};
struct point{
	int x,y,step;
	point(int x,int y,int step):x(x),y(y),step(step){}
};
int n,m,k,d,xx[5]={0,1,-1,0,0},yy[5]={0,0,0,1,-1},t=-1;
bool a[1001][101][101],b[1001][101][101];
void change(int time,ss s);
void bfs();
int main(){
	int i,j;
	cin>>n>>m>>k>>d;
	ss s[k];
	memset(a,false,sizeof(a));
	memset(b,true,sizeof(b));
	for(i=0;i<k;++i){
		cin>>s[i].c>>s[i].t>>s[i].v>>s[i].x>>s[i].y;
		a[1][s[i].x][s[i].y]=true;
	}
	for(i=1;i<=d;++i){
		for(j=0;j<k;++j)
			change(i,s[j]);
	}
	bfs();
	if(t!=-1){
		cout<<t;
	}
	else{
		cout<<"Bad luck!";
	}
	return 0;
}
void change(int time,ss s){
	a[time][s.x][s.y]=true;
	int c=time/s.t+1,i,f=((time%s.t)==0?s.t:(time%s.t));
	if((c-1)*s.t==time)c--;
	for(i=0;i<c;++i){
		int e=(i*s.t+f)*s.v;
		int N=s.x-e,S=s.x+e,W=s.y-e,E=s.y+e;
		if(s.c=='N'&&N>=0){
			a[time][N][s.y]=true;
		}
		if(s.c=='S'&&S<=n){
			a[time][S][s.y]=true;
		}
		if(s.c=='W'&&W>=0){
			a[time][s.x][W]=true;
		}
		if(s.c=='E'&&E<=m){
			a[time][s.x][E]=true;
		}
	}
} 
void bfs(){
	queue<point>q;
	q.push(point(0,0,0));
	while(!q.empty()){
		point p = q.front();
		
		if(p.step>d)
			return;
		q.pop();
		for(int i=0;i<5;++i){
			int tx=p.x+xx[i],ty=p.y+yy[i];
			if(!a[p.step+1][tx][ty]&&tx>=0&&tx<=n&&ty>=0&&ty<=m&&b[p.step+1][tx][ty]){
				b[p.step+1][tx][ty]=false;
			if(tx==n&&ty==m&&p.step<d){
				t=p.step+1;
				return;
			}
				q.push(point(tx,ty,p.step+1));
			}
		}
	}
}